<?php
/**
 * Modelo CRUD de uma tabela associada de N para 1, de forma a recuperar os dados de uma tabela N e outros campos da tabela 1
 * 
 * @example Tabela de imagens associada a uma tabela de categoria
 * @author Emanuel Melo e Renato Lenz @ PC4 Team
 */
class PC4_Crud_TabelaN extends PC4_Crud_Tabelas {
	
	public $tabelaCategoria;
	/**
	 * Construtor
	 * @param $tabela
	 * @param $tabelaCategoria
	 * @param $campoCategoria {campo: alias} - os campos a serem recuperados da tabela relacionada
	 * @param $fk - a chave estrangeira na tabela principal
	 * @param $campoId - a chave primária da tabela relacionada
	 * @param $validacoes
	 */
	function __construct($tabela, $tabelaCategoria, $campoCategoria = array('nome'), $fk = '', $campoId = 'id', $validacoes = array()) {
		$this->tabelaCategoria = $tabelaCategoria;
		if ((strpos($tabelaCategoria, ' ') === false)) {
			$aliasTabela = ' tb1';
		}
		else {
			list($tabelaCategoria, $aliasTabela) = explode(' ', $tabelaCategoria);
		}
		$campos = array();
		foreach ((array)$campoCategoria as $campo => $nome) {
			if (!is_numeric($campo)) {
				$campos[$nome] = $campo;
			}
			else {
				$campos[] = $nome;
			}
		}
		if (empty($fk)) {
			$fk = $campoId . '_' . $tabelaCategoria;
		}
		$tabelas = array(
			$this->tabelaCategoria => array(
				'campos' => $campos,
				'join' => 'inner',
				'pk' => $aliasTabela . '.' . $campoId,
				'fk' => $tabela[0] . '.' . $fk
			)
		);
		parent::__construct($tabela, $tabelas, $campoId, $validacoes);
	}

	/**
	 * @param $join the $join to set
	 */
	public function setJoin($join) {
		$this->tabelas[$this->tabelaCategoria]['join'] = $join;
	}
	
}
?>